package cn.gov.cus.rmftquartz.common.utils;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author wxming.
 * @date 2018/3/21.
 */
public class Test {

    // 广度优先搜索（Breadth First Search）
    public void BFS()
    {

        // 存储点的序列
        Queue<int[]> queue = new LinkedList<int[]>();

        int x, y;
        int[] pos =
                { 0, 0 };
        queue.offer(pos);

        while (!queue.isEmpty())
        {
            // 从队列中取出并移除
            pos = queue.poll();
            bfs_posList.add(pos);

            // 顺时针循环，右下左上四个方向
            for (int k = 0; k < 4; k++)
            {
                x = pos[0];
                y = pos[1];

                // 是否到达目的地
                if (mMapView[y][x] == 8)
                {
                    return;
                }

                x += next[k][1];
                y += next[k][0];

                // 是否出了边界
                boolean isOut = x < 0 || x >= mapWidth || y < 0 || y >= mapHeight;
                if (!isOut)
                {
                    // 是否是障碍物
                    if (mMapView[y][x] == 0 && bfs_book[x][y] == 0  || mMapView[y][x] == 8)
                    {
                        bfs_book[x][y] = 1;
                        queue.offer(new int[]
                                { x, y });
                    }
                }

            }
        }
    }

    int[][] next =
            {
                    { 0, 1 }, // 右
                    { 1, 0 }, // 下
                    { 0, -1 }, // 左
                    { -1, 0 } // 上
            };
}
